package pl.p01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Nodes;
import nu.xom.ParsingException;
import nu.xom.ValidityException;

/**
 * Clase de procesado de XML mediante XOM. Referencia:
 * http://www.latascadexela.es/2008/11/java-y-xml-xom.html
 */
public class ProcesaXML {

  /**
   * @param nombreFichero
   * @return
   */
  public static Invitacion fromXML(String nombreFichero) {
    Invitacion invitacion = null;
    try {
      invitacion = new Invitacion();
      
      // Crear el builder XOM
      Builder builder = new Builder();
      // Construir el árbol DOM a partir del fichero xml
      Document doc = builder.build(new FileInputStream(nombreFichero));

      // Buscamos una etiqueta mediante XPath
      String[] etiquetas = { "to", "date", "where", "why", "par", "signature" };
      for (int i = 0; i < etiquetas.length; i++) {
        Nodes resultados = doc.query("//" + etiquetas[i]);
        for (int j = 0; j < resultados.size(); j++) {
          Element nodo = (Element) resultados.get(j);
          String valor = nodo.getValue();
          // Añadir información a la clase Invitacion
          switch (i) {
            case 0:// Etiqueta "to"
              invitacion.setDestinatarios(valor);
              break;
            case 1:// Etiqueta "date"
              invitacion.setFecha(valor);
              break;
            case 2:// Etiqueta "where"
              invitacion.setLugar(valor);
              break;
            case 3:// Etiqueta "why"
              invitacion.setMotivo(valor);
              break;
            case 4:// Etiqueta "par"
              invitacion.setParrafos(valor);
              break;
            case 5:// Etiqueta "signature"
              invitacion.setRemitente(valor);
              break;
          }// switch

          //System.out.println(nodo.getLocalName());
          //System.out.println(valor);
        }// for
      }// for
    }// try
    catch (FileNotFoundException e) { e.printStackTrace(); }// catch
    catch (IOException e)           { e.printStackTrace(); }// catch
    catch (ValidityException e)     { e.printStackTrace(); }// catch
    catch (ParsingException e)      { e.printStackTrace(); }// catch

    return invitacion;
  }// parser
}// ParserXML